package com.liming.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.liming.common.pojo.dto.PageDTO;
import com.liming.common.pojo.dto.product.AddCategoryDTO;
import com.liming.common.pojo.dto.product.UpdateCategoryDTO;
import com.liming.common.pojo.entity.product.Category;
import com.liming.common.pojo.vo.PageVO;
import com.liming.common.pojo.vo.product.CategoryTreeVO;
import com.liming.common.pojo.vo.product.CategoryVO;

import java.util.Collection;
import java.util.List;

/**
 * @author liming
 * @date 2025/1/15
 */
public interface CategoryMircoService extends IService<Category> {

    /**
     * 所有分类及其子分类
     *
     * @return 分类树
     */
    List<CategoryTreeVO> tree();

    /**
     * 分类详情
     *
     * @param id 分类ID
     * @return 分类详情
     */
    CategoryVO get(Long id);

    /**
     * 精选分类
     *
     * @return 精选分类
     */
    List<CategoryVO> selectedCategory();

    /**
     * 新增分类
     *
     * @param addCategoryDTO 新增分类DTO
     * @return 是否成功
     */
    Boolean add(AddCategoryDTO addCategoryDTO);

    /**
     * 更新分类
     *
     * @param updateCategoryDTO 更新分类DTO
     * @return 是否成功
     */
    Boolean updateCategory(UpdateCategoryDTO updateCategoryDTO);

    /**
     * 更新分类精选状态
     *
     * @param id 分类ID
     * @return 是否成功
     */
    Boolean updateSelected(Long id);

    /**
     * 获取该分类ID下的所有子分类ID和自身ID
     *
     * @param categoryId 分类ID
     * @return 该分类ID下的所有子分类ID和自身ID
     */
    Collection<Long> parentAndChildren(Long categoryId);

    /**
     * 分页查询
     *
     * @param page 分页参数
     * @return 分页结果
     */
    PageVO<CategoryVO> myPage(PageDTO page);

    /**
     * 根据名称查询分类
     *
     * @param name 分类名称
     * @return 分类
     */
    Category getByName(String name);
}
